/*
 * @Author: Lian
 * @Date: 2022-06-08 11:54:58
 * @LastEditors: Lian
 * @LastEditTime: 2022-06-09 09:34:49
 * @Description: 用户表单校检规则
 */


// 导入定义验证规则的包
const joi = require('joi')

/**
 * string() 值必须是字符串
 * alphanum() 值只能包含 a-z A-Z 0-9 的字符串
 * min(length) 最小长度
 * max(length) 最大长度
 * required() 值是必填项，不能为 undefined
 * pattern(正则表达式) 值必须符合正则表达式的规则
 */

// 定义用户名和密码的验证规则
const username = joi.string().alphanum().min(1).max(10).required()

const password = joi.string().pattern(/^[\S]{3,12}$/).required()


// 定义 id, nickname, email 的规则
const id = joi.number().integer().min(1).required()
const nickname = joi.string().required()
const email = joi.string().email().required()


// dataUri() 指的是如下格式的字符串数据
// 
const avatar = joi.string().dataUri().required()


// 定义验证注册和登录的表单数据的规则对象
exports.reg_login_schema = {
  body: {
    username,
    password,
  }
}


// 验证规则对象 - 更新用户基本信息
exports.update_userinfo_schema = {
  body: {
    id,
    nickname,
    email
  }
}


// 验证规则对象 - 更新密码
exports.update_password_schema = {
  body: {
    oldPwd: password,
    // 新密码不能跟旧密码一致，并且验证规则与旧密码一致
    newPwd: joi.not(joi.ref('oldPwd')).concat(password),
  }
}


// 验证规则对象 - 更新头像
exports.update_avatar_schema = {
  body: {
    avatar,
  }
}